Curriculum Fortgeschrittene Programmierung ?

Übungen fett, Kurzaufgaben normal.
Ein Klick auf einen roten Hyperlink zeigt die Lösung.

  1. Turtle (Repetition zum Curriculum Elementare Programmierung)
  2. Punktoperator
  3. Move-Methode
  4. For Each ... Next-Schleife
  5. Kleine Helfer (Excel-Objekthierarchie)
  6. Objektvariablen vereinbaren
  7. Standardeigenschaften
  8. Zwischenresultate II (Objektverweis als Funktionswert)
  9. Vertausche
  10. Telefonverzeichnis (vordefinierte und benutzerdefinierte Klassen)
  11. Instanzen löschen
  12. Instanzen erstellen und löschen
  13. Geburtstage (benutzerdefinierte Klassen)
  14. sortierter Binärbaum
  15. Einfügealgorithmus
  16. verkettete Liste
  17. verkettete Liste debuggen
  18. Wörterbuch Standard (verkettete Strukturen)
  19. Traversierungsverfahren
  20. Inordnungs-Traversierung
  21. Breitentraversierung
  22. Entwurf
  23. Wörterbuch Professional (Baumtraversierungen)


Aufgabe Punktoperator

Lernziele

Fragen

Die Aufgabe RangeSkelett.xls enthält u.a. drei benannte Zellbereiche auf einem Excel-Tabellenblatt.

  1. Welchen Wert besitzt die Variable Nummer nach Ausführung der folgenden Programmzeilen?

  2. Was ändern die folgenden Zeilen am Tabellenblattinhalt?

Lösung LRange.xls

Aufgabe Move-Methode

Lernziele

Fragen

Implementieren Sie das Beispiel Zwischenresultate vollständig in VBA unter Excel. Nehmen Sie die beschriebenen Programmteile in Ereignisprozeduren auf, und ergänzen Sie das Programm um den Algorithmus, der das Arbeitsblatt "Zwischenresultate" um eine Position nach links verschiebt.

Lösung LZwischenresultate.xls

Aufgabe For Each ... Next-Schleife

Lernziele

Fragen

Schreiben Sie den Verschiebe-Algorithmus des Beispiels Zwischenresultate neu mit Hilfe einer For ... Next-Schleife anstelle der For Each ... Next-Schleife.

Aufgabe Objektvariablen vereinbaren

Lernziele

Notieren Sie die Anweisungen, die folgende Objektvariablen vereinbaren:

  1. auf Prozedurebene eine Variable zum Speichern eines Excel-Tabellenblatts
    ..................................
  2. auf Prozedurebene eine Variable zum Speichern eines beliebigen Excel-Objektes
    ..................................
  3. auf Projektebene eine Variable zum Speichern eines Excel-Tabellenblattes
    ..................................
  4. auf Modulebene eine allgemeine Objektvariable.
    ..................................

Aufgabe Standardeigenschaften

Lernziele

Der Zugriff auf Objekte, die in der Objekthierarchie weit unten stehen, kann dank der Standardeigenschaften von Objekten teilweise sehr kurz ausfallen.

  1. Schreiben Sie die folgenden Anweisungen so kurz wie möglich, indem Sie Standardeigenschaften verwenden. Was bewirken die Anweisungen.

  2. Formulieren Sie die folgenden Anweisungen ungekürzt, d.h. ohne Standardeigenschaften zu verwenden. Welche Datentypen besitzen die Variablen werBinIch... ?

Aufgabe Zwischenresultate II

Lernziele

Vertiefungsfragen

Ändern Sie das Beispiel LZwischenresultate.xls wie folgt:

  1. Lagern Sie den Programmcode, der das Tabellenblatt Zwischenresultate sucht, in eine Funktion sucheBlatt aus. Der Funktionswert soll True sein, falls das Blatt gefunden werden konnte und sonst False. Verwenden Sie die Funktion in den Ereignisprozeduren Tabellenblatt_Klick, nachRechts_Klick und nachLinks_Klick.

  2. Verallgemeinern Sie die Funktion sucheBlatt so, dass man als Argument einen beliebigen Tabellenblattnamen angeben kann, nach dem gesucht werden soll. Passen Sie die Funktionsaufrufe entsprechend an.

  3. Ändern Sie die Funktion sucheBlatt so ab, dass als Funktionswert ein Verweis auf das gefundene Blatt zurückgegeben wird. Existiert das genannte Tabellenblatt nicht, so soll die Funktion Nothing zurück geben. Passen Sie die Funktionsaufrufe entsprechend an.

  4. Worin liegt der Unterschied zwischen den beiden folgenden Zeilen?

Lösung LZwischenresultate II.xls

Aufgabe Vertausche

Lernziele

Vertiefungsfragen

Laden Sie die Arbeitsmappe vertauscheSkelett.xls, und schreiben Sie ein Programm, das zwei Tabellenblätter in der Worksheets-Auflistung vertauscht:

  1. Studieren Sie den Hilfetext zur Move-Methode des Worksheet-Objekts.
  2. Schreiben Sie eine Prozedur vertauscheBlätter, die zwei Verweise auf Tabellenblätter der Worksheets-Auflistung als Parameter entgegen nimmt und die Blätter vertauscht.
  3. Schreiben Sie eine Prozedur Test, die zwei Tabellenblätter auswählt und die Prozedur vertauscheBlätter aufruft.

Lösung Lvertausche.xls

Aufgabe Instanzen löschen

Lernziele

Beschreiben Sie den Inhalt der Variablen des folgenden Programms, jeweils nach Ausführung der nummerierten Zeilen. Welche Objekte existieren nach jeder Zeile? Begründen Sie Ihre Antworten einmal grafisch und einmal mit Hilfe von Zählern, welche die Verweise auf die Objekte zählen.

Public Eintrag1 As cEintrag
Private Eintrag2 As cEintrag

Sub Test()                     '1
  Dim Temp As cEintrag         '2
  Set Temp = New cEintrag      '3
  Set Eintrag1 = New cEintrag  '4
  Set Eintrag2 = Temp          '5
  Set Temp = Eintrag1          '6
  Set Eintrag1 = Nothing       '7
End Sub                        '8

Aufgabe Instanzen erstellen und löschen

Lernziele

Verständnisfragen

Öffnen Sie die Arbeitsmappe LTelefonverzeichnis.xls aus dem Lösungsverzeichnis, und machen Sie sich mit dem Programm vertraut.

  1. Fügen Sie die Namen 'David', 'Beat', 'Carmen' und 'Anna' in dieser Reihenfolge ins Verzeichnis ein, und beobachten Sie dabei den Programmablauf mit dem Debugger. Lassen Sie noch nicht die Liste ausgeben!

  2. Beobachten Sie den Programmablauf bei der Suche nach den Namen 'David' und 'Beat'.

  3. Beobachten Sie den Programmablauf beim Auflisten der Namen und Telefonnummern. Verfolgen Sie insbesondere die Ausführung des Sortieralgorithmus.

  4. Fügen Sie in das Klassenmodul cEintrag folgende Zeilen ein:

    Private Sub Class_Initialize()
      MsgBox "neues Objekt erstellt"
    End Sub

  5. Das Klassenmodul cEintrag enthalte zusätzlich noch folgende Zeilen:

    Private Sub Class_Terminate()
      MsgBox "Objekt " & Name & " wird gelöscht"
    End Sub

Aufgabe sortierter Binärbaum

Lernziele

  1. Sie sollen den Begriff 'eltern' in den oben abgebildeten Baum einfügen. Wie bleibt der Baum sortiert?

    1. Als rechter Nachfolger von 'blatt'
    2. Als linker Nachfolger von 'knoten'
    3. Als linker Nachfolger von 'ast'

  2. Fügen Sie folgende Begriffe der Reihe nach in den abgebildetetn Baum ein, und skizzieren Sie das Ergebnis.

    1. 'eltern', 'mutter', 'vater'
    2. 'vater', 'mutter', 'eltern'
    3. 'eltern', 'vater', 'mutter'

  3. Konstruieren Sie einen alternativen sortierten Binärbaum für die sieben im Bild genannten Begriffe. Beschreiben Sie Ihr Vorgehen rezeptartig. Wie viele verschiedene Bäume kann es bei sieben Begriffen schätzungsweise geben?

Aufgabe Einfügealgorithmus

Lernziele

Der folgende Entwurfscode beschreibt einen Algorithums für das Einfügen von Elementen in einen sortierten Binärbaum.

FügeHinzu Begriff
  FALLS Baum noch keinen Wurzelknoten hat
    erzeuge Wurzelknoten
    fülle Begriff ein.
  SONST
    gehe zu Wurzelknoten
    WIEDERHOLE BIS Begriff = Begriff im aktuellen Knoten
      FALLS Begriff < Begriff im aktuellen Knoten
        FALLS Knoten keinen linken Nachfolger hat
          erzeuge linken Nachfolgerknoten
          fülle Begriff ein
        gehe zu linkem Nachfolgerknoten.
      SONST
        FALLS Knoten keinen rechten Nachfolger hat
          erzeuge rechten Nachfolgerknoten
          fülle Begriff ein
        gehe zu rechtem Nachfolgerknoten.

Was passiert, wenn man versucht, mit dem beschriebenen Einfügealgorithmus einen Begriff einzufügen, der bereits im Baum vorhanden ist?

Aufgabe verkettete Liste

Lernziele

Jedes Element einer verketteten Liste ist nur über den Verweis von seinem Vorgängern aus erreichbar. Wird versehentlich ein solcher Verweis gelöscht, so sind alle nachfolgenden Elemente verloren. Reist beispielsweise die unten skizzierte Kette zwischen 'beat' und 'clara', so sind die Elemente 'clara', 'david' und 'eva' nie mehr erreichbar.

  1. Formulieren Sie entwurfssprachlich einen Algorithmus, der ...

    1. das Element 'karl' in die unten abgebildete verkettete Liste so hinter 'beat' einfügt, dass die Kette nicht abreist.
    2. das Element 'beat' aus der abgebildeten verketteten Liste so löscht, dass die Kette nicht abreist. Der Löschalgorithmus ist komplizierter als der Einfügealgorithmus. Worin liegt das Problem, und welche Erweiterung an der Datenstruktur könnte dieses Problem beseitigen?
    3. das Element 'clara' in der abgebildeten verketteten Liste sucht.

  2. Verallgemeinern Sie die drei Algorithmen und implementieren Sie sie in Visual Basic. Verwenden Sie die Arbeitsmappe verketteteListeSkelett.xls.

Lösung LverketteteListe.xls

Aufgabe Verkettete Liste debuggen

Lernziele

Vertiefungsfragen

Laden Sie die Arbeitsmappe LverketteteListe.xls aus dem Lösungsverzeichnis, und wechseln Sie in die Programmierumgebung.

  1. Machen Sie sich mit dem Programmcode vertraut.

  2. Wechseln Sie ins Modul Prozeduren, setzen Sie den Cursor auf die Variable Anfang, und klicken Sie auf die Schaltfläche Icon aktueller Wert in der Debugger-Symbolleiste (oder drücken Sie <Umschalt> + <F9>). Bestätigen Sie den Dialog, der erscheint, mit der Schaltfläche 'Hinzufügen'. Sie können nun im Fenster Überwachungsausdrücke den Inhalt der Variablen Anfang bei der Programmausführung jederzeit ansehen.

Aufgabe Traversierungsverfahren

Lernziele

Das folgende Bild zeigt zwei sortierte Beispielbäume.

  1. In welcher Reihenfolge werden die Knoten in den folgenden vier Traversierungsverfahren zurückgegeben?

  2. Formulieren Sie umgangssprachlich eine Vorschrift, die das erste Element nach der Inordnungs-Traversierung zurückgibt. Beginnen Sie dazu bei der Wurzel, und überlegen Sie sich, welchem Ast Sie jeweils folgen, wenn ein Knoten ...

  3. Formulieren Sie umgangssprachlich eine Vorschrift, die bei einem gegebenen Element das nächste Element nach der Inordnungs-Traversierung zurückgibt. Betrachten Sie dazu wieder die vier oben genannten Fälle, d.h. wenn der gegebene Knoten ...

  4. Belegen Sie die Richtigkeit Ihrer Algorithmen anhand der beiden Beispielbäume.

Aufgabe Inordnungs-Traversierung

Lernziele

Betrachten Sie den folgenden Beispielbaum, und begründen Sie die folgenden Aussagen mit Hilfe der Entwurfscodes für die Methoden OErster und ONächster.

OErsterRek(Baum)

  'Abbruchbedingung
  FALLS Baum leer ist
    gib Nothing zurück.
  SONST FALLS Baum KEINEN linken Nachfolger hat
    gib Baum zurück.

  'Reduktion
  SONST
    gibt ersten Eintrag von linkem Teilbaum von Baum zurück.

ONächster(Knoten)
  FALLS Knoten einen rechten Teilbaum hat
    gib ersten Eintrag des rechten Teilbaumes zurück.
  SONST
    beginne bei Knoten
    WIEDERHOLE BIS Begriff > Begriff in Knoten
      klettere einen Knoten hoch
      FALLS neuer Knoten leer ist
        gibt Nothing zurück
        brich ab.
    gib aktuellen Knoten zurück.

  1. g ist der erste Knoten des Baumes.
  2. m ist der Nachfolger von l.
  3. k ist der Nachfolger von h.
  4. g kann nicht der Nachfolger von l sein.
  5. p kann nicht der Nachfolger von l sein.
  6. x ist der letzte Knoten des Baumes.

Aufgabe Breitentraversierung

Lernziele

Betrachten Sie die beiden Binärbäume.

  1. Erstellen Sie nach dem Breitentraversierungsverfahren je eine Sequenz für die Elemente dieser beiden Bäume. Rekonstruieren Sie anschliessend aus Ihren Sequenzen von Elementen mit Hilfe des Einfügealgorithmus die Bäume, und vergleichen Sie sie mit den Originalen.

  2. Erstellen Sie nach dem Inordnungs-Tiefentraversierungsverfahren je eine Sequenz für die Elemente der beiden Bäume. Beschreiben Sie anschliessend ein Verfahren, das aus diesen Sequenzen wieder gute, d.h. möglichst ausbalancierte Bäume aufbauen kann.

Aufgabe Entwurf

Lernziele

Verwenden Sie für die Aufgaben Papier und Bleistift, und diskutieren Sie Ihre Lösungen mit Ihrem Nachbarn oder Ihrer Nachbarin. Es gibt meist keine eindeutige Antworten.

Vertiefungsfragen

  1. Die Übungsaufgabe "Turtle" implementiert einfache Turtlegrafik-Befehle in einem Standardmodul und stellt sie zur Verfügung. Welche Vorteile hätte man, wenn man anstelle des Standardmoduls ein Klassenmodul verwenden würde?

  2. Sie sollen eine Anwendung entwickeln, welche die Leistungen aller Studierenden einer Fakultät verwaltet. Welche der drei Datenstrukturen wählen Sie für folgende Daten? (Begründen Sie Ihre Antworten.)

    1. Datenfeld fester Grösse
    2. verkettete Liste
    3. sortierter Binärbaum

    1. Alle Studierenden und ihre persönliche Daten wie Name und Adresse
    2. Alle zulässigen Noten (nur ganze und halbe Noten)
    3. Alle Wahlfächer
    4. Die Leistungen eines Studenten oder einer Studentin
    5. Alle Dozierenden
    6. Alle Veranstaltungen, in denen Kreditpunkte erworben werden können
    7. Alle Veranstaltungstypen (z.B. Vorlesung, Seminar oder Lizarbeit)

  3. Angenommen, Sie sollen ein Zeichenprogramm entwickeln, das einfach zu bedienen ist. Sie kommen zum Schluss, dass es für die Benutzer wohl am einfachsten ist, wenn sie mit ihren gewohnten Werkzeugen wie Papier und Bleistift arbeiten können. Sie entschliessen sich deshalb für einen objektorientierten Ansatz.

    Sie identifizieren drei Gruppen von Werkzeugen:

    1. Gegenstände, auf die gezeichnet wird (z.B. Papier).
    2. Werkzeuge, mit denen gezeichnet wird (z.B. Bleistift).
    3. Werkzeuge, die eine Form beschreiben (z.B. Kreisschablone).

    Der folgende Entwurfscode illustriert an einem Beispiel, wie Sie gedenken, mit den Objekten dieser drei Gruppen zu arbeiten.

    Nimm oder erstelle roten Bleistift der Dicke 3.
    Nimm oder erstelle Kreisschablone mit Mittelpunkt 50/60 und Radius 30.
    Nimm oder erstelle weisses Papier im Format A4 quer.
    Zeichne auf Papier mit Kreisschablone und Bleistift.

    1. Nennen Sie für jede Werkzeuggruppe reale Gegenstände, von denen Sie abstrahieren können. Nennen Sie weitere Gegenstände, die Sie im Programm abbilden könnten, die aber in keine der drei Gruppen passen.

    2. Nennen Sie Eigenschaften dieser Gegenstände, die Ihr Programm implementieren muss. Nennen Sie Attribute der Gegenstände, die Ihr Programm ignorieren kann.

    3. Nennen Sie die Klassenmodule, die Sie benötigen, um ihre Gegenstände im Programm abzubilden. Aus welchen Klassen kann man die im Entwurfscode verwendeten Objekte erstellen?

    4. Welche Eigenschaften implementieren Sie als öffentliche Variablen, bei welchen verwenden Sie Property-Prozeduren? Skizzieren Sie die Implementation jener Eigenschaften, die im Entwurfscode verwendet werden.

    5. Das Zeichnen sei Aufgabe der Objekte der Gruppe i. Die 'zeichnen'-Methode nimmt je ein Objekt der Gruppen ii und iii entgegen und stellt das gewünschte auf dem Bildschirm dar. Notieren Sie den Prozedurkopf der Methode 'zeichnen' in VBA.

    6. Skizzieren Sie die Implementation des obigen Entwurfcodes in VBA.

©abo